//package com.atelier.plugin.projectTemplate;
//
//import com.atelier.plugin.entity.Template;
//import com.atelier.plugin.projectWizard.util.FileExtensionUtil;
//import com.atelier.plugin.projectWizard.util.FileType;
//import com.atelier.plugin.projectWizard.util.ICONS;
//import com.atelier.plugin.projectWizard.util.JavaFileTypeChecker;
//import com.atelier.plugin.tool.ProjectUtils;
//import com.atelier.plugin.ui.base.EditorSettingsInit;
//import com.atelier.plugin.ui.component.EditListComponent;
//import com.atelier.plugin.ui.component.EditorComponent;
//import com.intellij.codeInsight.CodeInsightSettings;
//import com.intellij.codeInsight.completion.CodeCompletionHandlerBase;
//import com.intellij.codeInsight.completion.CompletionType;
//import com.intellij.icons.AllIcons;
//import com.intellij.ide.projectView.ProjectView;
//import com.intellij.openapi.application.ApplicationManager;
//import com.intellij.openapi.command.WriteCommandAction;
//import com.intellij.openapi.editor.Document;
//import com.intellij.openapi.editor.Editor;
//import com.intellij.openapi.editor.EditorFactory;
//import com.intellij.openapi.editor.event.*;
//import com.intellij.openapi.editor.ex.EditorEx;
//import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
//import com.intellij.openapi.editor.impl.EditorImpl;
//import com.intellij.openapi.fileEditor.FileEditor;
//import com.intellij.openapi.fileEditor.FileEditorManager;
//import com.intellij.openapi.fileEditor.OpenFileDescriptor;
//import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
//import com.intellij.openapi.project.Project;
//import com.intellij.openapi.ui.SimpleToolWindowPanel;
//import com.intellij.openapi.util.IconLoader;
//import com.intellij.openapi.util.io.FileUtil;
//import com.intellij.openapi.util.io.FileUtilRt;
//import com.intellij.openapi.util.text.StringUtil;
//import com.intellij.openapi.vcs.update.FileTreeNode;
//import com.intellij.openapi.vfs.LocalFileSystem;
//import com.intellij.openapi.vfs.VirtualFile;
//import com.intellij.openapi.wm.ToolWindow;
//import com.intellij.openapi.wm.ToolWindowFactory;
//import com.intellij.psi.PsiDirectory;
//import com.intellij.psi.PsiManager;
//import com.intellij.ui.EditorTextField;
//import com.intellij.ui.PopupHandler;
//import com.intellij.ui.TreeSpeedSearch;
//import com.intellij.ui.content.Content;
//import com.intellij.ui.content.ContentFactory;
//import com.intellij.ui.treeStructure.Tree;
//import com.intellij.util.concurrency.AppExecutorUtil;
//import com.intellij.util.ui.tree.TreeUtil;
//import org.apache.commons.io.FileUtils;
//import org.jetbrains.annotations.NotNull;
//import org.jetbrains.annotations.Nullable;
//
//import javax.swing.*;
//import javax.swing.plaf.SplitPaneUI;
//import javax.swing.tree.DefaultMutableTreeNode;
//import javax.swing.tree.DefaultTreeCellRenderer;
//import javax.swing.tree.DefaultTreeModel;
//import java.awt.*;
//import java.awt.event.MouseAdapter;
//import java.awt.event.MouseEvent;
//import java.io.File;
//import java.io.IOException;
//import java.util.Arrays;
//
//
//public class MyToolWindowFactory implements ToolWindowFactory {
//    private Template file=new Template("test","");
//    /**
//     * 编辑器组件
//     */
//    private Editor editor;
//
//
//    @Override
//    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
//        // 获取项目根目录
//        File projectRoot = new File("D:/MyTest/Duck");
//
//        // 创建文件树根节点
//        DefaultMutableTreeNode root = new DefaultMutableTreeNode(projectRoot.getName());
//
//        // 构建文件树
//        buildFileTree(projectRoot, root);
//
//        // 创建文件树模型
//        DefaultTreeModel treeModel = new DefaultTreeModel(root);
//
//        // 原生文件树组件
//         ProjectView projectView  = ProjectView.getInstance(project);
//
//        // 创建文件树组件
//        Tree fileTree = new Tree(treeModel);
//        // 选择文件树显示的根节点
//        fileTree.setRootVisible(false);
//        // 自动选择树中的任何节点
//        fileTree.setShowsRootHandles(true);
//
//        // 设置自定义的渲染器
//        fileTree.setCellRenderer(new FileTreeCellRenderer());
//        // 增加搜索功能
//        new TreeSpeedSearch(fileTree);
//
//        //自定义编辑器
//        //EditorFactory editorFactory = EditorFactory.getInstance();
//        //Document document = editorFactory.createDocument("");
//        //this.editor = editorFactory.createEditor(document);
//        //refreshUI();
//        //EditorSettingsInit.init(this.editor);
//
//        //采用文件编辑器
//         FileEditorManager instance1 = FileEditorManager.getInstance(project);
//         Editor selectedTextEditor = instance1.getSelectedTextEditor();
//        // 创建面板并添加组件
//        JPanel mainPanel = new JPanel(new BorderLayout());
//        JScrollPane treeScrollPane = new JScrollPane(fileTree);// 创建面板并添加组件
//
//        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeScrollPane,selectedTextEditor.getComponent());
//        mainPanel.add(splitPane, BorderLayout.CENTER);
//
//        VirtualFile rootfile = LocalFileSystem.getInstance().findFileByIoFile(projectRoot);
//        // 设置工具窗口内容面板
//        FileEditorManagerEx.getInstanceEx(project).openFile(rootfile,true);
//         ContentFactory instance = ContentFactory.SERVICE.getInstance();
//         Content fuck = instance.createContent(mainPanel, "Atelier", false);
//        toolWindow.getContentManager().addContent(fuck);
//        // 注册文件树点击事件，更新编辑器内容
//        fileTree.addTreeSelectionListener(e -> {
//            DefaultMutableTreeNode node = (DefaultMutableTreeNode) fileTree.getLastSelectedPathComponent();
//            if (node != null && node.getUserObject() instanceof File) {
//                File nodeFile = (File) node.getUserObject();
//                file.setName(nodeFile.getName());
//                 VirtualFile fileByIoFile = LocalFileSystem.getInstance().findFileByIoFile(nodeFile);
//                 if (fileByIoFile!= null) {
//                instance1.setSelectedEditor(fileByIoFile,fileByIoFile.getUrl());
//                updateSplitPane(project,toolWindow,fileByIoFile,splitPane);
//                 }
//               // String fileContent = null;
//               // try {
//               //     fileContent = FileUtilRt.loadFile(nodeFile);
//               // } catch (IOException ex) {
//               //     throw new RuntimeException(ex);
//               // }
//               // file.setCode(fileContent);
//               //refreshUI();
//               // Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
//               // if (editor != null) {
//               //     CodeCompletionHandlerBase codeCompletionHandler = new CodeCompletionHandlerBase(CompletionType.BASIC);
//               //     ApplicationManager.getApplication().runReadAction(() -> {
//               //         codeCompletionHandler.invokeCompletion(project, editor, 3);
//               //     });
//               //
//               // }
//            }
//        });
//        // 监听文档变化，实时触发代码补全
//        //DocumentListener documentListener = new DocumentAdapter() {
//        //    @Override
//        //    public void documentChanged(DocumentEvent e) {
//        //     invokeCodeCompletion(project);
//        //    }
//        //};
//        //editor.getDocument().addDocumentListener(documentListener);
//        // 展开文件树的所有节点
//        TreeUtil.expandAll(fileTree);
//    }
//
//    private void buildFileTree(File folder, DefaultMutableTreeNode parentNode) {
//        if (!folder.isDirectory()) {
//            return;
//        }
//        DefaultMutableTreeNode folderNode = new DefaultMutableTreeNode(folder.getName());
//        folderNode.setUserObject(folder); // 设置文件夹节点的用户对象为文件夹对象
//        parentNode.add(folderNode);
//
//        File[] files = folder.listFiles();
//        if (files != null) {
//            for (File file : files) {
//                if (file.isDirectory()) {
//                    buildFileTree(file, folderNode);
//                } else {
//
//                    DefaultMutableTreeNode fileNode = new FileTreeNode(file.getName());
//                    fileNode.setUserObject(file);
//                    // Store the File object as the user object of the node
//                    folderNode.add(fileNode);
//                }
//            }
//        }
//    }
//    private class FileTreeCellRenderer extends DefaultTreeCellRenderer {
//        @Override
//        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
//            super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
//
//            if (value instanceof DefaultMutableTreeNode) {
//                DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
//                Object userObject = node.getUserObject();
//                if (userObject instanceof File) {
//                    File file = (File) userObject;
//                    if (file.isDirectory()) {
//
//                        setIcon(AllIcons.Nodes.Folder);
//                        if (file.getName().startsWith("java")) {
//                            setIcon(AllIcons.Modules.SourceRoot);
//                        }
//                        if (file.getName().startsWith("resource")) {
//                            setIcon(AllIcons.Modules.ResourcesRoot);
//                        }
//                    }
//                    if (file.isFile()) {
//
//                        String fileExtension = FileExtensionUtil.getFileExtension(file.getName());
//                        if (fileExtension.contains("xml")) {
//                            if (file.getName().startsWith("pom")){
//                                setIcon(ICONS.Pom);
//                            }else {
//                                setIcon(AllIcons.FileTypes.Xml);
//                            }
//                        }
//                        if (fileExtension.contains("yml") || fileExtension.contains("yaml")) {
//                            setIcon(AllIcons.FileTypes.Yaml);
//                        }
//                        if (fileExtension.contains("js")) {
//                            setIcon(AllIcons.FileTypes.JavaScript);
//                        }
//                        if (fileExtension.contains("java")) {
//                            FileType fileType = JavaFileTypeChecker.getFileType(file.getPath());
//                            if (fileType != null && FileType.CLASS.equals(fileType)) {
//                                setIcon(AllIcons.Nodes.Class);
//                            }
//                            if (fileType != null && FileType.ENUM.equals(fileType)) {
//                                setIcon(AllIcons.Nodes.Enum);
//                            }
//                            if (fileType != null && FileType.ABSTRACT_CLASS.equals(fileType)) {
//                                setIcon(AllIcons.Nodes.AbstractClass);
//                            }
//                            if (fileType != null && FileType.INTERFACE.equals(fileType)) {
//                                setIcon(AllIcons.Nodes.Interface);
//                            }
//                        }
//                    }
//                    setText(file.getName());
//                }
//            }
//
//            return this;
//        }
//    }
//    public class FileTreeNode extends DefaultMutableTreeNode {
//        public FileTreeNode(Object userObject) {
//            super(userObject);
//        }
//
//        @Override
//        public String toString() {
//            Object userObject = getUserObject();
//            if (userObject instanceof File) {
//                File file = (File) userObject;
//                return file.getName();
//            }
//            return super.toString();
//        }
//    }
//    private void refreshUI() {
//        if (this.file == null) {
//            ((EditorImpl)this.editor).setViewer(true);
//            // 重置文本内容
//            WriteCommandAction.runWriteCommandAction(ProjectUtils.getCurrProject(), () -> this.editor.getDocument().setText(""));
//            ((EditorEx)editor).setHighlighter(EditorHighlighterFactory.getInstance().createEditorHighlighter(null, "demo.java.vm"));
//        } else {
//            ((EditorImpl) this.editor).setViewer(false);
//            // 重置文本内容
//            String fileContent = StringUtil.convertLineSeparators(this.file.fileContent());
//            ApplicationManager.getApplication().runWriteAction(() -> {
//                this.editor.getDocument().setText(fileContent);
//            });
//            ApplicationManager.getApplication().runReadAction(() -> {
//                ((EditorEx) this.editor).setHighlighter(EditorHighlighterFactory.getInstance().createEditorHighlighter(ProjectUtils.getCurrProject(), this.file.fileName()));
//            });
//
//        }
//    }
//    private void updateFileEditorContent(File file,Project project)  {
//        VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByIoFile(file);
//        if (virtualFile != null) {
//            FileEditorManager.getInstance(project).openFile(virtualFile, true);
//        }
//    }
//    private void invokeCodeCompletion(Project project) {
//        if (editor != null) {
//            CodeCompletionHandlerBase codeCompletionHandler = new CodeCompletionHandlerBase(CompletionType.BASIC);
//            ApplicationManager.getApplication().runReadAction(() -> {
//                codeCompletionHandler.invokeCompletion(project, editor, 0);
//            });
//        }
//    }
//    private void updateSplitPane(Project project, ToolWindow toolWindow, VirtualFile file,JSplitPane splitPane) {
//        if (file == null) {
//            // 如果文件为空，则移除编辑器面板
//            toolWindow.getContentManager().removeAllContents(true);
//        } else {
//            // 获取文件编辑器管理器
//            FileEditorManagerEx  editorManager = FileEditorManagerEx.getInstanceEx(project);
//
//            // 获取文件编辑器数组
//            @Nullable Editor editor = editorManager.openTextEditor(new OpenFileDescriptor(project, file), false);
//
//            // 创建文件编辑器面板
//            JPanel editorPanel = new JPanel(new BorderLayout());
//
//            // 将文件编辑器添加到面板
//
//                JComponent editorComponent = editor.getComponent();
//                editorPanel.add(editorComponent, BorderLayout.CENTER);
//
//
//            // 更新JSplitPane的右侧组件
//            splitPane.setRightComponent(editorPanel);
//
//            // 分离器位置调整（可选）
//            splitPane.setDividerLocation(0.5); // 设置分离器的位置
//
//            // 更新工具窗口内容
//            ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
//            Content content = contentFactory.createContent(splitPane, "", false);
//            toolWindow.getContentManager().removeAllContents(true);
//            toolWindow.getContentManager().addContent(content);
//        }
//    }
//
//
//}
